import { CallHandler, Injectable, NestInterceptor } from '@nestjs/common';
import { map, Observable } from 'rxjs';
import { ExecutionContext } from '@nestjs/common/interfaces/features/execution-context.interface';

interface ApiResponse<T> {
  status: number;
  data?: T;
  msg: string;
}
// 全局响应拦截器：返回格式化数据
@Injectable()
export class ResponseInterceptor<T> implements NestInterceptor {
  intercept(
    context: ExecutionContext,
    next: CallHandler,
  ): Observable<ApiResponse<T>> {
    return next.handle().pipe(
      map((data) => {
        // 检查data是否是错误对象或者需要特殊处理
        if (data instanceof Error) {
          return {
            status: 500,
            msg: data.message || 'Unknown error',
          };
        }
        // 统一返回结果格式，包括消息信息
        const msg = '操作成功'; // 可以根据操作类型定义不同的消息
        return {
          status: 200,
          msg,
          ...data,
        };
      }),
    );
  }
}
